#include "mex.h"
#include <math.h>

static void oupath(double p[], double n[], int r, int c, double a, double b, double m, double sigma0)
{
        int i,j;
        double dt=0.5/5000;

        for (j=0; j<c; j++)
		{
			p[j*r]=sigma0;

			for (i=0; i<r-1; i++)
            {
                p[j*r+i+1]=p[j*r+i]+a*(m-p[j*r+i])*dt+b*sqrt(dt)*n[j*(r-1)+i];
            }
		}


}

//  static void variation(long Npaths)
//  {
//      int i;
//      for (i=0,i<Npaths,i++)
//
//  }


void mexFunction(int nlhs,mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
        double *p, *n;
        int row,column;
        double a, b, m, sigma0;
        row=mxGetM(prhs[0])+1; column=mxGetN(prhs[0]);
        a=mxGetScalar(prhs[1]);
        b=mxGetScalar(prhs[2]);
        m=mxGetScalar(prhs[3]);
        sigma0=mxGetScalar(prhs[4]);
        plhs[0]=mxCreateDoubleMatrix(row,column,mxREAL);
        p=mxGetPr(plhs[0]);
        n=mxGetPr(prhs[0]);

        oupath(p,n,row,column,a,b,m,sigma0);


}
